package main

import (
	"encoding/json"
	"fmt"
	"github.com/gorilla/mux" //路由库
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"path/filepath"
	"strings"
)

func main() {
	//可以下载放进去的单片机程序文件
	http.Handle("/appdown/", http.FileServer(http.Dir("static")))

	mux_router := mux.NewRouter() //用mux库做路由
	//获取所有可以下载的程序列表
	mux_router.HandleFunc("/restful/getAllBinList", getAllBinList).Methods("GET")

	http.Handle("/", mux_router) //这一句别忘了 否则前面的mux_router是不作用的

	fmt.Println("listen on 7777 port")
	http.ListenAndServe(":7777", nil)
}

func getAllBinList(w http.ResponseWriter, r *http.Request) {
	PthSep := string(os.PathSeparator) //分割符 /
	//注意你如果用go run运行的话获取当前地址不是你目录的地址
	files, err := ListDir(getCurrentDirectory()+PthSep+"static/appdown", ".base64")
	//转为json
	b, err := json.Marshal(files) //用这个函数时一定要确保字段名首位大写
	fmt.Println(files, err)
	fmt.Fprintf(w, "%s", b) //注意在armlinux下面不能用fmt.Fprintf(w, string(b))的方式
}

//获取指定目录下的所有文件，不进入下一级目录搜索，可以匹配后缀过滤。
func ListDir(dirPth string, suffix string) (files []string, err error) {
	files = make([]string, 0, 10)
	dir, err := ioutil.ReadDir(dirPth)
	if err != nil {
		return nil, err
	}
	//PthSep := string(os.PathSeparator)//分割符 /
	suffix = strings.ToUpper(suffix) //忽略后缀匹配的大小写
	for _, fi := range dir {
		if fi.IsDir() { // 忽略目录
			continue
		}
		if strings.HasSuffix(strings.ToUpper(fi.Name()), suffix) { //匹配文件
			//files = append(files, dirPth+PthSep+fi.Name())//打印的是全路径
			files = append(files, fi.Name())
		}
	}
	return files, nil
}

//获取当前路径
func getCurrentDirectory() string {
	dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		log.Fatal(err)
	}
	return strings.Replace(dir, "\\", "/", -1)
}
